//引入公共函数
var util = require('../../utils/util');

//声明请求的站点
var requestDomain = util.config('requestDomain');

//声明存放页面实例的变量
var that;

//page函数
Page({

  //页面公共数据
  data: {

    //是否显示新建回复项的关键字与回复内容输入框
    showNewAutoReplyItem: false,

    //新增回复项的按钮是否禁用
    addAutoReplyBtnDisabled: false,

    //确认进行新增或修改的按钮是否禁用
    confirmAutoReplyBtnDisabled: true,
    
    //删除回复项按钮是否禁用
    delAutoReplyBtnDisabled: true,

    //启用修改关键字和回复内容输入框的回复项ID
    showEditInputItem: '',

    //选中的自动回复项ID
    selectAutoReplyItem: '',

    //新建关键字输入框值
    newKeyWordInputVal: '',

    //新建回复内容输入框值
    newReplyContentInputVal: '',

    //修改关键字的输入框值
    keyWordInputVal: '',

    //修改回复内容的输入框值
    replyContentInputVal: '',

    //自动回复项列表数据
    autoReplyList: [],

    //修改的回复项列表
    updateList: []

  },

  /**
   * 页面加载时触发
   */
  onLoad: function (options) {

    //存储页面实例变量
    that = this;

    //调用获取回复数据列表函数
    that.getReplyList();

  },

 /**
  * 自动回复项被点击时触发
  */

  autoReplyItemClick: function(e) {

    //获取到即将被修改或删除的回复项ID（时间戳）
    var editItemId = e.currentTarget.id;

    //将选中的回复项ID设置为该变量的值
    that.setData({selectAutoReplyItem: editItemId});
    
    //将删除回复按钮解除禁用
    that.setData({delAutoReplyBtnDisabled: false});

    //判断当前已经在编辑状态的回复项ID是否不等于当前需要编辑的ID（切换了回复项）
    if(that.data.showEditInputItem != editItemId) {
      console.log(editItemId);
      
      //触发设置需要更新的数据列表
      that.setUpdateList(editItemId);

    }
  },

  /**
   * 当页面空白处被点击是触发
   */

  emptyBlockClick: function() {

    //将已选的回复项ID清空
    that.setData({selectAutoReplyItem: ''});
    
    //设置删除回复的按钮为禁用
    that.setData({delAutoReplyBtnDisabled: true});
  
  },

  /**
   * 当输入新建的关键字时触发
   */

  inputNewKeyWord: function(e) {

    //取得输入的关键字内容
    var keyWord = e.detail.value;

    //设置新建关键字
    that.setData({newKeyWordInputVal: keyWord});

  },

  /**
   * 当输入新建的回复内容时触发
   */

  inputNewReplyContent: function(e) {

    //取得输入的回复内容
    var replyContent = e.detail.value;
    
    //设置新建的回复内容
    that.setData({newReplyContentInputVal: replyContent});
  
  },

  /**
   * 当离开修改输入框焦点时触发
   */

  inputBlur: function() {

    //触发更新修改数据列表
    that.setUpdateList();

  },

  /**
   * 当修改关键字输入框输入时触发
   */

  inputKeyWord: function(e) {

    //获取输入的关键字
    var keyWord = e.detail.value;

    //禁用新建回复按钮
    that.setData({addAutoReplyBtnDisabled: true});

    //启用确认修改按钮
    that.setData({confirmAutoReplyBtnDisabled: false});

    //获取到输入的关键字
    that.data.keyWordInputVal = keyWord;
  },

  /**
   * 当修改回复内容输入框输入时触发
   */

  inputReplyContent: function(e) {

    //获取输入的回复内容
    var replyContent = e.detail.value;

    //禁用新建回复按钮
    that.setData({addAutoReplyBtnDisabled: true});

    //启用确认修改按钮
    that.setData({confirmAutoReplyBtnDisabled: false});

    //获取输入的回复内容
    that.data.replyContentInputVal = replyContent;
  
  },

  /**
   * 更新要修改的回复项数据
   */

  setUpdateList: function(editItemId) {

    //判断当前选中修改的回复项和当前修改关键字或回复内容输入框是否不为空
    if(that.data.showEditInputItem != '' && (that.data.keyWordInputVal != '' || that.data.replyContentInputVal != '')) {

      //存放是否找到需要更新的项目
      var foundUpdateItem = false;

      //遍历更新列表
      for(var updateIndex in that.data.updateList) {

        //判断当前遍历到的回复项是否是需要修改的项
        if(that.data.updateList[updateIndex].timestamp == that.data.showEditInputItem) {

          //设置此更新列表项的数据
          that.data.updateList[updateIndex] = {
            keyWord: that.data.keyWordInputVal == '' ? that.data.updateList[updateIndex].keyWord :  that.data.keyWordInputVal,
            replyContent: that.data.replyContentInputVal == '' ? that.data.updateList[updateIndex].replyContent :  that.data.replyContentInputVal,
            timestamp: that.data.showEditInputItem
          }

          //设置已经找到更新的回复项
          foundUpdateItem = true;

        }
      }

      //修改数据的对象
      var updateObj = {};

      //判断修改是否输入了关键字，如果输入了则设置进修改数据对象
      if(that.data.keyWordInputVal != '') {
        updateObj.keyWord = that.data.keyWordInputVal;
      }

      //判断修改是否输入了回复内容，如果输入了则设置进修改数据对象
      if(that.data.replyContentInputVal != '') {
        updateObj.replyContent = that.data.replyContentInputVal;
      }

      //将当前修改的回复项ID放入修改数据对象的时间戳用于修改
      updateObj.timestamp = that.data.showEditInputItem;

      //遍历自动回复数据列表
      for(var autoReplyIndex in that.data.autoReplyList) {

        //判断是否找到对应需要修改的回复项
        if(that.data.autoReplyList[autoReplyIndex].timestamp == updateObj.timestamp) {

          //将需要修改的回复项的关键字设为当前修改的值
          that.data.autoReplyList[autoReplyIndex].keyWord = updateObj.keyWord ? updateObj.keyWord : that.data.autoReplyList[autoReplyIndex].keyWord;

          //将需要修改的回复内容的回复内容设为当前修改的值
          that.data.autoReplyList[autoReplyIndex].replyContent = updateObj.replyContent ? updateObj.replyContent : that.data.autoReplyList[autoReplyIndex].replyContent;

          //更新到自动回复的数据列表
          that.setData({autoReplyList: that.data.autoReplyList});

          //判断是否找到了修改的回复项
          if(!foundUpdateItem) {

            //找到项才添加进需要正式提交修改的更新列表
            that.data.updateList.push(updateObj);
          
          }
        }
      }
      console.log(that.data.updateList);

      //将修改关键字和修改回复内容输入框清空
      that.setData({
        keyWordInputVal: '',
        replyContentInputVal: ''
      });      
    }

    //判断是否提供了修改的回复项ID
    if(editItemId) {

      //将当前修改的回复项为此ID
      that.setData({showEditInputItem: editItemId});
    
    }
  },

  /**
   * 获取自动回复的数据列表
   */

  getReplyList: function() {

    //显示顶部加载图标
    wx.showNavigationBarLoading();
  
    //发起请求
    wx.request({
      
      //获取自动回复数据列表的接口地址
      url: requestDomain + 'autoReply/find',
      
      //请求该接口的必须数据
      data: {

        //商户ID
        storeId: util.globalData('storeId'),
        
        //验证用户的session  
        _3rdSession: util.globalData('_3rdSession')
      
      },

      method: 'POST',

      //获取自动回复数据列表成功
      success: function(result){
        
        //判断是否获取成功
        if(result && result.data && util.checkSuccess(result)) {

          //判断数据是否合法
          if(result.data && result.data.data) {

            wx.hideNavigationBarLoading();

            //获取到数据列表
            var autoReplyList = result.data.data;

            //将列表根据更新的时间从近到远排序
            autoReplyList.sort(function(a, b) {
              return b.timestamp - a.timestamp;
            });

            that.setData({autoReplyList: autoReplyList});
            console.log(autoReplyList);
          }
          else {

            wx.hideNavigationBarLoading();
            //显示列表数据不合法
            util.showError('获取失败', '获取到的自动回复数据列表有误');
          
          }
        }
        else {

          wx.hideNavigationBarLoading();
          //显示获取自动回复数据列表失败错误
          util.showError('获取失败', '获取自动回复数据列表失败[' + result.data.errMsg + ']', result.data.errCode);

        }

        wx.stopPullDownRefresh();
      },

      //获取自动回复数据列表失败
      fail: function() {
          wx.hideNavigationBarLoading();
          wx.stopPullDownRefresh();
          //显示获取自动回复数据列表失败错误
          util.showError('获取失败', '发起获取自动回复数据列表请求失败');
      }
    });
  },

 /**
  * 新增回复项函数
  */

  addAutoReply: function() {

    //将当前选中的回复项设为未选择状态
    that.setData({selectAutoReplyItem: ''});
    
    //禁用删除按钮
    that.setData({delAutoReplyBtnDisabled: true});

    //判断是否显示新建回复输入项
    if(that.data.showNewAutoReplyItem) {

      //禁用确认按钮
      that.setData({confirmAutoReplyBtnDisabled: true});
      
      //隐藏新建回复关键字和回复内容输入框
      that.setData({showNewAutoReplyItem: false});

    }
    else {

      //启用确认按钮
      that.setData({confirmAutoReplyBtnDisabled: false});

      //显示新建回复关键字和回复内容输入框
      that.setData({showNewAutoReplyItem: true});
    
    }
  },

  /**
   * 确认按钮按下时触发
   */

  confirmAutoReply: function() {

    //取消选中回复项
    that.setData({selectAutoReplyItem: ''});

    //禁用删除按钮
    that.setData({delAutoReplyBtnDisabled: true});

    //判断是否开启了新建回复项输入框
    if(that.data.showNewAutoReplyItem) {

      //调用确认添加回复函数
      that.confirmAddAutoReply({

        //添加回复成功
        success: function() {

          //禁用确认按钮
          that.setData({confirmAutoReplyBtnDisabled: true});

          //隐藏新建回复关键字和回复内容输入框
          that.setData({showNewAutoReplyItem: false});

        },

        //添加回复失败
        fail: function(err) {
          util.showError('添加失败', '在进行添加自动回复项时失败' + err.errMsg, err.errCode);
        }

      });
    }
    else {

      //调用确认修改回复函数
      that.confirmEditAutoReply({

        //修改回复成功
        success: function() {

          //禁用确认按钮
          that.setData({confirmAutoReplyBtnDisabled: true});

        },

        //修改回复失败
        fail: function(err) {

          util.showError('修改失败', '在进行修改自动回复时失败' + err.errMsg, err.errCode);

        }
      });
    }
  },

  /**
   * 确认添加回复函数
   */

  confirmAddAutoReply: function(callback) {

    //判断新建关键字和回复内容输入框的值是否不为空
    if(that.data.newKeyWordInputVal == '' || that.data.newReplyContentInputVal == '') {

      //参数不足，提示数据不合法
      wx.showModal({
        title: '数据不合法',
        content: '关键字和回复内容不能为空'
      });

      //跳出处理函数
      return;
    }

    //显示添加中提示
    wx.showToast({
      title: '添加回复中',
      icon: 'loading',
      mask: true,
      duration: 10000
    });

    //发起添加回复请求
    wx.request({

      //添加回复接口地址
      url: requestDomain + 'autoReply/add',

      //添加回复的参数
      data: {

        //商户ID
        storeId: util.globalData('storeId'),
        
        //验证用户的session  
        _3rdSession: util.globalData('_3rdSession'),

        //添加回复的关键字
        keyWord: that.data.newKeyWordInputVal,
        
        //添加回复的回复内容
        replyContent: that.data.newReplyContentInputVal

      },

      method: 'POST',

      success: function(result){

        //判断返回的数据是否合法正确
        if(result && result.data && result.data.data && util.checkSuccess(result)) {

          //获取到添加的回复的时间戳
          var timestamp = result.data.data;

          //显示添加成功的提示
          wx.showToast({
            title: '添加成功',
            icon: 'success'
          });

          //添加到自动回复列表          
          that.data.autoReplyList.push({
            keyWord: that.data.newKeyWordInputVal,
            replyContent: that.data.newReplyContentInputVal,
            timestamp: timestamp
          });

          //将自动回复数据列表从近到远排序
          that.data.autoReplyList.sort(function(a, b) {
            return b.timestamp - a.timestamp;
          });

          //更新自动回复数据列表
          that.setData({autoReplyList: that.data.autoReplyList});

          //返回添加成功
          callback.success();

        }
        else {

          //隐藏添加中提示
          wx.hideToast();

          //返回添加失败
          callback.fail(result.data);

        }
      },
      fail: function(err) {

        //隐藏添加中提示
        wx.hideToast();

        //返回添加失败
        callback.fail({
          errMsg: '发起添加自动回复项请求失败',
          errCode: 0
        });
      }
    });
  },

  /**
   * 确认修改回复函数
   */

  confirmEditAutoReply: function(callback) {
    
    //更新修改数据列表
    that.setUpdateList();

    console.log(that.data.updateList);

    //显示修改回复中提示
    wx.showToast({
      title: '修改回复中',
      icon: 'loading',
      duration: 10000
    });

    //发起修改回复请求
    wx.request({
      
      //修改回复接口地址
      url: requestDomain + 'autoReply/update',
      
      //修改回复的参数
      data: {

        //商户ID
        storeId: util.globalData('storeId'),
        
        //验证用户的session
        _3rdSession: util.globalData('_3rdSession'),

        //需要修改的数据列表
        updateAutoReplyList: that.data.updateList

      },

      method: 'POST',
      
      success: function(result){

        //判断返回的数据是否合法正确
        if(result && result.data && util.checkSuccess(result)) {

          //显示修改成功提示
          wx.showToast({
            title: '修改成功',
            icon: 'success',
            mask: true
          });

          //设置修改回复成功600毫秒后返回到店铺设置页面
          setTimeout(function() {
            wx.navigateBack({
              delta: 1
            })
          }, 600);

          //返回成功
          callback.success();

        }
        else {

          //隐藏修改中提示
          wx.hideToast();

          //隐藏修改中提示
          callback.fail(result.data);
        
        }
      },
      
      fail: function() {

        //隐藏修改中提示
        wx.hideToast();

        //隐藏修改中提示
        callback.fail({
          errMsg: '发起修改自动回复项失败',
          errCode: 0
        });

      }
    });
  },

  /**
   * 删除回复函数
   */

  delAutoReply: function() {
    console.log('删除' + that.data.selectAutoReplyItem);

    //询问是否删除回复项
    wx.showModal({
      title: '删除自动回复项',
      content: '您是否需要删除选中的自动回复项？',
      success: function(modal) {

        //判断是否选是
        if(modal.confirm) {

          //显示删除回复中提示
          wx.showToast({
            title: '删除回复中',
            icon: 'loading',
            mask: true,
            duration: 10000
          });

          //发起删除回复请求
          wx.request({

            //删除回复接口地址
            url: requestDomain + 'autoReply/del',

            //删除回复接口参数
            data: {

              //商户ID
              storeId: util.globalData('storeId'),
              
              //验证用户的session
              _3rdSession: util.globalData('_3rdSession'),

              //获取选中回复项的时间戳
              timestamp: that.data.selectAutoReplyItem

            },

            method: 'POST',

            //删除回复项成功
            success: function(result){

              //判断返回的数据是否合法正确
              if(result && result.data && result.data.data && util.checkSuccess(result)) {
                
                //遍历自动回复消息列表
                for(var autoReplyIndex in that.data.autoReplyList) {

                  //判断是否找到需要删除的回复项
                  if(that.data.autoReplyList[autoReplyIndex].timestamp == that.data.selectAutoReplyItem) {

                    //从列表删除此回复项
                    that.data.autoReplyList.splice(autoReplyIndex, 1);

                    //跳出遍历
                    break;

                  }
                }

                //取消选中的回复项以及更新自动回复列表到界面
                that.setData({
                  selectAutoReplyItem: '',
                  autoReplyList: that.data.autoReplyList
                });

                //显示删除成功提示
                wx.showToast({
                  title: '删除成功',
                  icon: 'success'
                });

              }
              else {

                //隐藏删除中提示
                wx.hideToast();

                //显示删除失败提示
                util.showError('删除失败', '在进行删除自动回复项时失败' + result.data.errMsg, result.data.errCode);

              }
            },

            //删除回复项失败
            fail: function() {

              //隐藏删除中提示
              wx.hideToast();

              //显示删除失败提示
              util.showError('删除失败', '在进行删除自动回复项时失败');

            }
          });
        }
      }
    });
  },

  onPullDownRefresh: function() {
      that.getReplyList();
  }

})